在上一篇我們學到用actions/toolkit的core撰寫JS action
這篇我們會來會來看一下如何在workflow中執行js檔
在workflow中執行js檔
和製作一個JS action並在workflow中使用它的概念有點像,它們都是以JS去撰寫,並複用
那些邏輯
,不過這並不是一個正規的方法,而是一種workfaround
通常如果有以下需求的話可以考慮採這個方式
1.若本地執行、Github Actions上執行都會發生的話,就建議採在workflow中執行js檔
因為我們可以透過command傳參數給js檔,但是JS action一定只能透過input context接收參數,故無法在本地成功執行
2.未來考慮搬家到其他平台
例如Jenkins並沒不支援JS action的功能,但是可以仍可以執行js檔
不過這個方法也有一些缺點
npm install minimist
minimist
是一個Node package,用來解析command中帶的參數
,並將參數轉換為 JavaScript 物件,讓處理傳入的參數更方便
在.github目錄以外的地方建個資料夾裝工具類的js檔
import minimist from 'minimist';
function main(){
const argv = minimist(process.argv.slice(2));
const userName = argv.name;
// 在這個js檔中所有印出的東西都會被視為return value,所以要慎選印出的內容
console.log(`Hello ${userName}. How's it going with your new workflow?`);
console.log('It\'s good. I\'m trying to run JS file in it.');
// 反而return value不會被當作return value
return `Hello ${userName}. This is my return value`;
}
main();
另外你可能也會看到有人用console.log印出set-output這個Github Actions提供的command
console.log('::set-output name=userName::Tempura');
這也是一種workaround,但set-output已被公告未來會廢棄,所以不建議這麼做
看到這你可能會好奇那console.log("userName=Tempura >> $GITHUB_OUTPUT")
有沒有用,答案是沒有用
因為當workflow在執行時,runner會產生暫時的檔案,環境變數、output就會被放在這些檔案中,所以無法用這種方式無法寫入這個暫存檔
jobs:
run_js_file:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: |
npm install
npm list
- name: step1
id: say-hello
run: |
echo reply=$(node tools/index.js --name Tempura) >> $GITHUB_ENV
- name: step2
run: |
echo reply is $reply